package net.zjitc.servlet.datasource.book;

import org.apache.jasper.compiler.JspUtil;

import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

/**
 * @Author Administrator
 * @Date 2020/5/26 14:01
 * 界面UI
 * 1功能界面展示
 * 2接受用户输入信息
 * 3调用dao层的方法完成对应得功能
 **/
public class Test {
    /*定义用户输入对象，定义在类的内部方法的外面，想让不同的方法都使用一个Scanner*/
    private static Scanner sc=new Scanner(System.in);
    private static BookDao dao=new BookDaoDB();
    public static void main(String[] args) {
        /*循环，选择语句*/
        while (true){
            /*展示功能选择界面
            * 根据用户的输入，进入不同的功能界面*/
            System.out.println("----欢迎光临-----");
            System.out.println("1 添加图书");
            System.out.println("2 查询图书");
            System.out.println("3 更新图书");
            System.out.println("4 删除图书");
            System.out.println("5 退出");
            System.out.println("请输入你的选择:");
            /*接受用户的输入
            * 自动创建变量 ctrl+alt+V*/
            int c = sc.nextInt();
            switch (c){
                case 1:
                    insertUI();
                    break;
                case 2:
                    selectUI();
                    break;
                case 3:
                    updateUI();
                    break;
                case 4:
                    deleteUI();
                    break;
                case 5:
                    System.exit(0);
                    break;
                default:
                    System.out.println("输入有误");
                    break;
            }
        }
    }
    /*
    * 添加图书界面
    * 1.展示添加界面
    * 2.接受用户输入的信息
    * 3.将用户输入的信息封装到对象中
    * 4.调用dao的方法完成添加功能*/

    private static void insertUI() {
        System.out.println("---添加图书界面----");
        /*方法内部给语句加注释：ctrl+shift
        * 给类或方法加注释：/**回车键*/
        System.out.println("请输入图书名称");
        /**
         * 使用的是同一个Scanner对象，接受完int/double再接受String
         * 会出错，需要加一条语句处理
         */
        sc.nextLine();
        String name = sc.nextLine();
        System.out.println("请输入出版社:");
        String press = sc.nextLine();
        System.out.println("请输入作者:");
        String author = sc.nextLine();
        System.out.println("请输入价格：");
        double price = sc.nextDouble();
        /*把用户输入的数据封装到对象*/
        Book book=new Book(name,press,author,price);
        /*调用dao方法真正实现添加保存功能*/
        int i =dao.insert(book);
        if (i>0){
            System.out.println("保存成功");
        }else if (i==0){
            System.out.println("保存失败");
        }else {
            System.out.println("图书名称重复");
        }

    }

    private static void selectUI() {

        System.out.println("---查询图书界面---");
        /*1.调用dao层方法得到所有图书集合
        * 2.展示图书内容（遍历集合）*/
        List<Book> books = dao.selectAll();
        if(books!=null){
            Iterator<Book> iterator = books.iterator();
            while (iterator.hasNext()){
                Book book= iterator.next();
                /*直接输入book，实质是调用book.toString方法，所*/
                System.out.println(book);
            }
        }
    }

    private static void updateUI() {
        System.out.println("---修改图书界面----");
        /*1.接收用户输入图书名称
        * 2.调用dao方法判断该图书是否存在、
        * 若存在
        * 1）输出对象内容
        * 2）接收用户修改后的图书信息
        * 3）调用dao方法完成修改操作
        * 4）根据返回值，若返回0，提示更新失败
        * 否则提示更新成功
        * 若不存在：提示信息*/
        System.out.println("请输入要修改的图书名称：");
        sc.nextLine();
        String name = sc.nextLine();
        Book book = dao.selectByName(name);
        if (book==null){
            System.out.println("你要修改的图书不存在");
        }else {
            System.out.println(book);
            System.out.println("请输入修改后的图书名称：");
            String n = sc.nextLine();
            System.out.println("请输入修改后的出版社：");
            String press = sc.nextLine();
            System.out.println("请输入修改后的作者;");
            String author = sc.nextLine();
            System.out.println("请输入修改后的价格:");
            double price = sc.nextDouble();
            /*将用户输入的修改后的封装成新的Book对象newBook
            * 注意：id是不变的，记得要传入*/
            Book newBook=new Book(book.getId(),n,press,author,price);
            /*id不变，其他内容是用户新输入的*/
            int i =dao.update(book.getId(),newBook);
            if (i>0){
                System.out.println("更新成功");
            }else {
                System.out.println("更新失败");
            }
        }
    }

    private static void deleteUI() {
        System.out.println("----删除图书界面----");
        /*1.接收用户输入的要删除的图书名称
        * 2.调用dao方法判断图书是否存在
        * 若返回null 表示图书不存在，提示信息
        * 否则，表示图书存在，调用dao方法完成删除操作*/
        System.out.println("请输入要删除的图书名称：");
        sc.nextLine();
        String name=sc.nextLine();
        Book book = dao.selectByName(name);
        if (book==null){
            System.out.println("要删除的图书不存在");
        }else {
            int i = dao.delete(book.getId());
            if (i>0){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
            }
        }
    }
}
